דרך ראשונה:
שליפה של כל התוצאות מהטבלה (SELCET *) ואז foreach דרך המערך ומיון דרך in_array. אם נמצא בתוך המערך של id's של חברים - חבר, ואם לא - לא חבר.
דרך שניה:
שליפה מותנית של חברים בלבד ע"י SELECT IN, כך שהוא שולף לי רק חברים ואז עוד שליפה של "לא חברים" בצורה אחרת (לא ממש חשבתי על זה...) אולי שליפה של הכל (SELECT *) ואז מחיקה של ערכים עם UNSET,ז"א כל הערכים שנמצאים כבר במערך של החברים, כך שהוא משאיר לי רק "לא חברים".
או שאולי יש דרך אחרת יעילה יותר שעדיין לא חשבתי עליה??
תודה רבה מראש.
14 תשובות
שתי הדרכים לא יעילות ברמה מטורפת, אבל הבעיה היא במבנה של בסיס הנתונים. אם יש לך את האפשרות לשנות את זה (ואז סביר להניח שתצטרך לשנות חלקים בקוד שנסמכים על זה) - פשוט תוסיף עמודה ב"משתמשים" שהיא תקבע אם המשתמש חבר או לא. אם יש מידע נוסף לכל "חבר", כן תוסיף טבלה חדשה, אבל אז לפחות תדע מי החברים לפי העמודה החדשה.
הרבה זמן לא באמת כתבתי קוד, בייחוד לא SQL, ושכחתי חצי מהדברים.
אבל אני כן זוכר שאתה יכול להשתמש ב-Join (אם אתה לא יכול לשנות את זה).
הבעיה היא שהמערך שקובע אם מישהו חבר או לא הוא דינמי - הוא משתנה לפי המשתמש שמחובר, אני שולף אותו מפייסבוק.
אני בעצם מנסה לסנכרן בין רשימת החברים מפייסבוק לרשימת המשתמשים אצלי. לכן אני לא יכול להוסיף עמודה. אין לי עוד מידע על כל חבר. לפחות לא משהו שאני צריך לשמור.
תודה.
יש לי DB של אנשים מפייסבוק, אני מזהה אותם ע"פ הID שלהם בפייסבוק.
נאמר שאדם חדש מגיע. אני רוצה להראות לו את כל האנשים שנמצאים אצלי והם גם חברים שלו בפייסבוק. אני בעצם צריך לסנכרן בין מערך של חברים שאני מקבל מהAPI ובין התוצאות של ה SQL.
מה הדרך הטובה ביותר? אני מניח ששלי (מה שכתבתי למעלה) היא לא. האם כדאי פשוט לשמור בDB שלי רשימה של חברים שגם נמצאים אצלי לכל אדם ואז לעדכן את זה כל פעם שמישהו חדש נכנס?
תעשה טבלה רבים-ל-רבים של חברים לפי fbid
fbid | friendfbid
כשמתמש נכנס בפעם הראשונה - הכנס לטבלה הזו הרבה שורות לפי הנתונים שאתה מקבל מפייסבוק.
כל פעם שאתה רוצה להנסכרן מחדש את רשימת החברים שיש לך במערכת עם הרשימה של המשתמשים מפייסבוק - תמחוק את כל השורות ששייכות לאותו משתמש ותכניס אותם מחדש.
בטבלה של משתמשים רשומים תוסיף עמודה בשם fbid
שלפיה אחרך כך תוכל לשלוף.
כשאתה מקבל מפייסבוק את רשימת הID של החברים תוכל להשתמש ברשימה הזאת עבור שאילתת IN.
where fbid = $myfbid
and friendFbId in ($listOfIdsFromFacebook)
left join users
on user.fbid = friends2friends.friendFbId
לפייסבוק יש את FQL שמאפשר לעשות את זה בקלות..
זה יחזיר לך ID'S של כל המשתמשים שחברים שלך (כאשר הפונקציה me() מחזירה את הID של המשתמש המחובר)(אפשר גם לשים במקום ID ולא את הפונקציה ME)
בשביל להוציא מידע של הפרופיל על החברים תשתמש בשאליתת IN.
@intval
אתה אומר שכדאי פשוט ליצור עוד טבלה עם החברים של כל משתמש שקיימים גם אצלי? ז"א לחסוך כל פעם את המיון של האנשים ולבחור לסנכרן רק מדי פעם?
הבנתי נכון?
למען האמת אתה יכול בעת ההתחברות של המשתמש למערכת לשלוף את רשימת החברים מפייסבוק (כמו שהציאה dekel) ולשמור אותה בסשן או שקאש כלשהו ואז לא צריך לשמור ולסנכרן טבלה כזו.
זה לא ענה על השאלה של מתי לעשות סינכרון בין הרשימה של היוזרים שיש לי לבין רשימת החברים שלו. או שבעצם אתה אומר שכדאי לעשות סינכרון כזה פעם אחת בכל התחברות ולשמור מערך של id's בסשן? מערך של id's שהם גם חברים של היוזר וגם נמצאים אצלי ז״א.
למה לשמור בסשן? זה הורס את החוויה של "לא צריך להסתמך על מה שיש לך עכשיו"..
כל פעם שאתה צריך תבדוק מחדש.
לעבור על שני מערכים דו מימדיים של מאות פרטים ולמצוא זהויות כל פעם מחדש? זה בזבוז משאבים ענק...
מספיק אחת לחיבור. לא מתווספים כל כך הרבה חברים חדשים לאנשים בפייסבוק בזמן שהם עושים דברים באתר אחר.
שאלה נוספת. האם כדאי להעביר HTML בAJAX או להעביר JSON ואז ליצור את הHTML בצד הלקוח?